#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：pid_control_example 
@File ：demo_for_PIDController.py
@IDE  ：PyCharm 
@Author ：李涵彬
@Date ：2024/5/14 下午9:49 
"""

import random

from PIDController import PIDController, clamp_integral_symmetric, clamp_output_positive


# 模拟系统
def simulate_system(input_value):
	# 假设系统的响应是输入值的两倍,加上一些噪声
	return 2 * input_value + random.uniform(-5, 5)


# 主程序
def main():
	# 初始化PID控制器
	pid_controller = PIDController(P=0.5, I=0.1, D=0.2)

	# 设置目标值为50
	target = 50

	# 设置积分项限制函数
	pid_controller.set_integral_limits(clamp_integral_symmetric)

	# 设置输出限制函数
	pid_controller.set_output_limits(clamp_output_positive)

	# 初始输入值为0
	input_value = 0

	# 运行模拟
	for i in range(100):
		# 获取模拟系统的当前输出
		current_value = simulate_system(input_value)

		# 计算PID控制器的输出
		new_input_value = pid_controller.update(current_value, target)

		# 更新输入值
		input_value = new_input_value

		# 打印当前状态
		print(f"Iteration: {i}, Target: {target}, Current Value: {current_value}, Input Value: {input_value}")


if __name__ == "__main__":
	main()
